package com.tosee.ws;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.tosee.exception.GeneriqueException;
import com.tosee.ws.model.WSBoolean;
import com.tosee.ws.model.WSEpisode;
import com.tosee.ws.model.WSInteger;
import com.tosee.ws.model.WSListe;
import com.tosee.ws.model.WSParamMethode;
import com.tosee.ws.model.WSSaison;
import com.tosee.ws.model.WSSerie;
import com.tosee.ws.model.WSUser;

/**
 * @author robint
 */
@WebService(name = "WSTosee", targetNamespace = "http://ws.webServiceTosee.xxx.com/")
public interface IWSTosee {

    /**
     * Retourne une {@link WSListe} de {@link WSSerie} en fonction du nom passé en parametre
     * 
     * @return WSListe{@link WSListe} de {@link WSSerie}
     * @throws GeneriqueException
     */
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @WebMethod(operationName = "getSeriesByName")
    public WSListe<WSSerie> getSeriesByName(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "name") String _name) throws GeneriqueException;

    /**
     * Methode d'authentification
     * 
     * @return Le {@link WSUser} authentifier
     * @throws GeneriqueException
     */
    @WebMethod(operationName = "authentifier")
    public WSUser authentifier(@WebParam(name = "paramMethode") WSParamMethode _paramMethode) throws GeneriqueException;

    /**
     * Methode de récupération de toutes les informations d'une série
     * 
     * @return {@link WSSerie}
     */
    @WebMethod(operationName = "getAlloSerie")
    public WSSerie getAlloSerie(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "code") Integer _code) throws GeneriqueException;

    /**
     * Methode de récupération de toutes les informations d'une série
     */
    @WebMethod(operationName = "creerUtilisateur")
    public WSInteger creerUtilisateur(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "user") WSUser _user) throws GeneriqueException;

    /**
     * Methode de récupération de toutes les informations d'une user
     */
    @WebMethod(operationName = "chargerGrappeSerieUser")
    public WSListe<WSSerie> chargerGrappeSerieUser(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "idUser") Integer _idUser) throws GeneriqueException;

    /**
     * Methode de récupération de toutes les informations d'une saison
     */
    @WebMethod(operationName = "getAlloSaison")
    WSSaison getAlloSaison(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "code") Integer _code) throws GeneriqueException;

    /**
     * Methode de récupération de toutes les informations d'un episode
     */
    @WebMethod(operationName = "getAlloEpisode")
    WSEpisode getAlloEpisode(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "code") Integer _code) throws GeneriqueException;

    /**
     * Methode d'abonnement à une série
     */
    @WebMethod(operationName = "ajouterSerie")
    WSBoolean ajouterSerie(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "code") Integer _code) throws GeneriqueException;

    /**
     * Methode de visu d'une liste dépisode
     */
    @WebMethod(operationName = "ajouterEpisodeVu")
    WSBoolean ajouterEpisodeVu(@WebParam(name = "paramMethode") WSParamMethode _paramMethode,
            @WebParam(name = "listeCodeEpisode") List<Integer> _listeCode) throws GeneriqueException;

}
